from django import forms
from .models import BookModel, UserModel


# TODO: 图书表单
class BookForm(forms.ModelForm):
    # TODO: 针对price进行进一步校验不能输入小于0
    def clean_price(self):
        price = self.cleaned_data.get('price')
        if price <= 0:
            raise forms.ValidationError('图书价格输入有误')
        return price

    class Meta:
        # TODO: 定义验证表单模型
        model = BookModel
        # TODO: 验证表单所有字段
        fields = '__all__'
        # TODO: 针对其中几个字段进行验证
        # fields = ['title', 'pages']

        # TODO: 排除了少数几个字段不需要验证，那么可以使用exclude来代替fields
        # exclude = ['price']

        # TODO: 自定义错误消息
        error_messages = {
            'title': {
                'required': '图书标题不能为空',
                'max_length': '图书标题不能超过100个字符'
            },
            'pages': {
                'required': '图书页数不能为空',
                'min_value': '页数最少为0',
                'max_value': '页数最多为1000页'
            },
            'price': {
                'required': '图书价格不能为空',
                'invalid': '图书价格输入不正确'
            }
        }


# TODO: 注册表单
class SignUpForm(forms.ModelForm):
    # TODO: 自定义接收字段
    psd1 = forms.CharField(min_length=6, max_length=12)
    psd2 = forms.CharField(min_length=6, max_length=12)

    # TODO: 对手机号进行验证
    def clean_telphone(self):
        telphone = self.cleaned_data.get('telphone')
        exists = UserModel.objects.filter(telphone=telphone).exists()
        if exists:
            raise forms.ValidationError('%s手机号已存在' % telphone)
        return telphone

    # TODO: 对输入密码和重复密码进行验证
    def clean(self):
        cleaned_data = super(SignUpForm, self).clean()
        psd1 = cleaned_data.get('psd1')
        psd2 = cleaned_data.get('psd2')
        if psd1 != psd2:
            raise forms.ValidationError('两次密码输入不一致')
        return cleaned_data

    class Meta:
        model = UserModel
        # TODO: 排除password验证
        exclude = ['password']

        # TODO: 自定义错误信息
        error_messages = {
            'username': {
                'required': '用户昵称输入不能为空',
                'max_length': '用户昵称不能超过20个字符'
            },
            'telphone': {
                'required': '手机号输入不能为空',
                'invalid': '手机号输入格式不正确',
                'min_length': '手机号为11位字符',
                'max_length': '手机号为11位字符'
            },
            'psd1': {
                'required': '密码输入不能为空',
                'invalid': '密码输入格式不正确',
                'min_length': '密码为6-12位字符',
                'max_length': '密码为6-12位字符'
            },
            'psd2': {
                'required': '密码输入不能为空',
                'invalid': '密码输入格式不正确',
                'min_length': '密码为6-12位字符',
                'max_length': '密码为6-12位字符'
            }
        }
